package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.ClassEntity;
import com.tfjybj.itoo.teach.model.ClassModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * ClassService接口
 * class表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface ClassService extends BaseServicePlus<ClassEntity> {
	
	//region 模板生成：模糊查询
    /**
     * 根据行政班名称模糊查询class
     *
     * @param name  行政班名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的class
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<ClassEntity> queryByLikeName(String name, Integer pageNo, Integer pageSize);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */
    /**
     * 根据专业id查询班级信息集合（带分页）
     * @param professionId
     * @param pageNo
     * @param pageSize
     * @return 该专业下所有班级
     * @author 杨燕梅
     * @since 2.0.0 2018-11-13 19:30:40
     */
    PageInfo<ClassModel>queryByProfessionIdPageInfo(String professionId, Integer pageNo, Integer pageSize);

    /**
     *根据专业id查询班级信息集合
     *  @author 杨燕梅 2018-11-13 19:30:40
     * @param professionId
     * @return 该专业下所有班级
     */
    List<ClassModel>queryByProfessionId(String professionId);

    /**
     * 根据专业id集合查询班级信息集合
     * @author 杨燕梅 2018-11-13 19:30:40
     * @param professionIds
     * @return 专业id集合下属所有班级
     */
    List<ClassModel> queryByProfessionIds(List<String> professionIds);

    /**
     *根据行政班id查询专业id
     * @param classId 行政班id集合
     * @return 行政班id
     * @author 田成荣
     * @since 2.0.0 2018-11-13 19:07:35
     */
    String queryProfessionIdByClassId(String classId);

    /**
     * 根据年级查询班级信息
     * @param grade
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-24 15:32:34
     */
    List<ClassModel> queryClassByGrade(String grade);

    /**
     * 根据专业id和年级查询班级信息
     * @param professionId
     * @param grade
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-24 21:19:24
     */
    List<ClassModel> queryClassByProfessionIdAndGrade(String professionId, String grade);

    /**
     * 根据行政班code 查询班级信息
     * @param code
     * @return
     * @author 严文文
     * @since 2.0.0 2018-11-27 10:35:34
     */
    List<ClassModel> queryClassesByCode(String code);

    /**
     * 根据班级名称模糊查询某一专业下属班级
     *
     * @param professionId 专业id
     * @param searchContent  行政班名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的class
     * @author 杨燕梅
     * @since 2.0.0 2018-11-29 10:36:13
     */
    PageInfo<ClassModel> queryByLikeNameAndProfessionId(String professionId, Integer pageNo, Integer pageSize, String searchContent);

    /**
     * 根据班级ID查询班级详情
     *
     * @param idList 班级ID
     * @return 班级实体集合
     * @author 杨燕梅
     * @since 2.0.0 2018-12-12 21:29:18
     */
    List<ClassModel> queryClassById(List<String> idList);

    /**
     * 根据ID导出班级信息
     *
     * @param response 响应
     * @param idList   班级ID
     * @return 导出结果信息
     * @author 杨燕梅
     * @since 2.0.0 2018-12-12 21:29:22
     */
    ItooResult exportByClassId(HttpServletResponse response, List<String> idList);

    /**
     * 根据条件导出班级
     *
     * @param response     响应
     * @param searchContent    班级名称/班级简称
     * @return 导出结果信息
     * @author 杨燕梅
     * @since 2.0.0 2018-12-23 17:54:38
     */
    ItooResult exportByStrLike(HttpServletResponse response, String professionId, String searchContent);

    /**
     * 下载班级模板，批量导入使用
     *
     * @param response 响应
     * @return 下载模板是否成功
     * @author 杨燕梅
     * @since 2.0.0 2018-11-30 10:43:00
     */
    boolean downLoadTemplate(HttpServletResponse response);

    /**
     * 批量导入班级
     * @param multipartFile
     * @param request
     * @param response
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-30 11:47:20
     */
    ItooResult importTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 根据errorListId导出未成功导入的班级信息
     *
     * @param response    响应
     * @param errorListId 为成功导入的分组id
     * @return 导出结果
     * @author 杨燕梅
     * @since 1.0.0 2018-12-2 11:54:15
     */
    boolean exportErrorList(String errorListId, HttpServletResponse response);

    /**
     * 查询所有Class
     * @return
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<ClassEntity> queryAll();

    /**
     * 根据班级代码和班级名称查询班级是否已存在
     *
     * @param code   班级代码
     * @param name   班级名称
     * @return 班级信息
     * @author 杨燕梅
     * @since 2.0.0 2018-12-20 09:57:54
     */
    List<ClassEntity> queryByCodeAndNameExist(String code, String name);

    /**
     * 将数据保存到权限中去
     *
     * @param classEntity
     * @author 李建帅
     * @since 2.0.0 2018-12-9 19:18:10
     */
    void saveToAuth(ClassEntity classEntity);

    /**
     * 根据professionId查找所有行政班信息
     *
     * @param professionId 专业id
     * @return classEntityList
     * @author 智雪艳
     * @since 2.0.0 2019-05-28 10:35:56
     */
    List<ClassEntity> findByProfessionId(String professionId);

    /**
     * 根据专业id查询在校班级以及人员
     *
     * @param majorId
     * @param maxSession
     * @param minSession
     * @param screenClassName
     * @return 班级以及班级人员信息
     * @author 智雪艳
     * @since 2.0.0 2019-05-28 10:35:56
     */
    List<ClassModel> querySchoolClass(String majorId, Object maxSession, Object minSession, String screenClassName);
}
